﻿using UnityEngine;
using UnityEditor;
using System.IO;
using System.Xml;

public class NetEditor{
    [MenuItem("Tools/网路框架/配置修改", false, 1)]
    private static void ChangeServerConfig()
    {
        ScriptableWizard.DisplayWizard<ChangeServerConfig>("修改服务器ip/端口号", "确认");
    }

    [MenuItem("Tools/网路框架/使用说明", false, 11)]
    private static void NewMenuOption_2()
    {
        EditorWindow.GetWindow(typeof(使用说明));
    }
}

public class ChangeServerConfig : ScriptableWizard {
    public string 主服务器ip = "127.0.0.1";
    public int 主服务器端口 = 9999;
    public string http服务器ip = "127.0.0.1";
    public int http服务器端口 = 9998;
    public string 数据服务器ip = "127.0.0.1";
    public int 数据服务器端口 = 9997;

    private string path = null;

    void OnEnable() {
        path = Application.dataPath + "/LFramework/NetFramework/03.Config/ConnectConfig.xml";
        主服务器端口 = EditorPrefs.GetInt("主服务器端口",9999);
        http服务器端口 = EditorPrefs.GetInt("http服务器端口",9998);
        数据服务器端口 = EditorPrefs.GetInt("数据务器端口",9999);
        主服务器ip = EditorPrefs.GetString("主服务器ip","127.0.0.1");
        http服务器ip = EditorPrefs.GetString("http服务器ip", "127.0.0.1");
        数据服务器ip = EditorPrefs.GetString("数据服务器ip", "127.0.0.1");
    }

    //检测按钮点击
    void OnWizardCreate()
    {
        string[] mainip = 主服务器ip.Split('.');
        string[] httpip = http服务器ip.Split('.');
        string[] dataip = 数据服务器ip.Split('.');
        int type = 0;

        if (主服务器端口 < 1 || 主服务器端口 > 65535)
        {
            ShowNotification(new GUIContent("主服务器端口号错误！"));
        }
        else if (http服务器端口 < 1 || http服务器端口 > 65535)
        {
            ShowNotification(new GUIContent("http服务器端口号错误！"));
        }
        else if (数据服务器端口 < 1 || 数据服务器端口 > 65535)
        {
            ShowNotification(new GUIContent("数据服务器端口号错误！"));
        }
        else
        {
            try
            {
                for (int i = 0; i < 4; i++)
                {
                    int.Parse(mainip[i]);
                }
                type=1;
                for (int i = 0; i < 4; i++)
                {
                    int.Parse(httpip[i]);
                }
                type=2;
                for (int i = 0; i < 4; i++)
                {
                    int.Parse(dataip[i]);
                }
                EditorPrefs.SetString("主服务器ip", 主服务器ip);
                EditorPrefs.SetString("http服务器ip", http服务器ip);
                EditorPrefs.SetString("数据服务器ip", 数据服务器ip);
                EditorPrefs.SetInt("主服务器端口", 主服务器端口);
                EditorPrefs.SetInt("http服务器端口", http服务器端口);
                EditorPrefs.SetInt("数据务器端口", 数据服务器端口);
            }
            catch
            {
                switch (type) {
                    case 0:
                        ShowNotification(new GUIContent("主服务器ip错误！"));
                        break;
                    case 1:
                        ShowNotification(new GUIContent("http服务器ip错误！"));
                        break;
                    case 2:
                        ShowNotification(new GUIContent("数据服务器ip错误！"));
                        break;
                    default:
                        ShowNotification(new GUIContent("未知错误！"));
                        break;
                }
            }
            
        }
        if (File.Exists(path)) {
            updateXML();
        }
        else{
            CreateXML();

        }
    }
    void OnWizardUpdate() {
        if (主服务器端口 < 1 || 主服务器端口 > 65535) {
            errorString = "主服务器端口号错误！";
        }
        else if (http服务器端口 < 1 || http服务器端口 > 65535)
        {
            errorString = "http服务器端口号错误！";
        }
        else if(数据服务器端口 < 1 || 数据服务器端口 > 65535)
        {
            errorString = "数据服务器端口号错误！";
        }
    }

    /// <summary>
    /// 创建XML配置文件
    /// </summary>
    void CreateXML()
    { 
        
        if (!File.Exists(path))
        {
            //创建最外层的节点
            XmlDocument xml = new XmlDocument();
            XmlElement config = xml.CreateElement("ConnectConfig");

            //创建子节点
            XmlElement main_server = xml.CreateElement("main_server");
            XmlElement http_server = xml.CreateElement("http_server");
            XmlElement data_server = xml.CreateElement("data_server");

            //设置节点的属性
            main_server.SetAttribute("ip", 主服务器ip);
            main_server.SetAttribute("port", 主服务器端口.ToString());

            http_server.SetAttribute("ip", http服务器ip);
            http_server.SetAttribute("port", http服务器端口.ToString());

            data_server.SetAttribute("ip", 数据服务器ip);
            data_server.SetAttribute("port", 数据服务器端口.ToString());

            //添加节点至XML文件中
            config.AppendChild(main_server);
            config.AppendChild(http_server);
            config.AppendChild(data_server);
            xml.AppendChild(config);
            //最后保存文件
            xml.Save(path);
        }
    }

    /// <summary>
    /// 更新XML配置文件
    /// </summary>
    void updateXML()
    {
        File.Delete(path);
        CreateXML();
    }
}

public class 使用说明 : EditorWindow
{
    void OnGUI()
    {
        GUIStyle gs = new GUIStyle();
        gs.fontSize = 24;
        gs.wordWrap = true;
        GUILayout.Label("1.点击菜单栏\"网络框架/配置修改\"设置主服务器、http服务器及数据服务器的ip和端口;", gs);
        GUILayout.Label("2.确认NetFramework/03.Config文件夹下包含ConnectConfig.XML文件;",gs);
        GUILayout.Label("3.将NetFramework预制体放在开始场景中，且不能销毁;", gs);
        GUILayout.Label("4.参考Demo编写程序;", gs);
        GUILayout.Label("5.版本:1.01", gs);
        GUILayout.Label("6.QQ:397554852", gs);
        GUILayout.Label("7.2018年05月20日", gs);

    }
}